In Software Defined Networking (SDN), the control plane is physically separated from the forwarding plane and communicates with the forwarding plane through an interface (e.g., the OpenFlow protocol). OpenFlow uses a match-action mechanism for network packet switching. However, OpenFlow explicitly specifies protocol headers on which it operates. With the growing number of headers in SDN paradigm, OpenFlow has become a less desirable approach for defining packet processing. As such, other protocol-independent languages for configuring switches (e.g., programmable ASICs) have recently emerged. Today, however, when a user describes a specification for a programmable switch, the necessary APIs for programming packet processing by the switch have to be obtained separately (e.g., from the switch's vendor), which negatively affects the switch's usability.